package com.ruoyi.project.service;

import java.io.IOException;
import java.util.List;

import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.contract.domain.ContractInfo;
import com.ruoyi.project.domain.CompomentInfo;
import com.ruoyi.project.domain.ProjectInfo;
import com.ruoyi.project.domain.ProjectModelInfo;
import com.ruoyi.project.vo.FloorInfo;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;

/**
 * 项目信息Service接口
 * 
 * @author ruoyi
 * @date 2022-08-26
 */
public interface IProjectInfoService 
{
    /**
     * 查询项目信息
     * 
     * @param id 项目信息主键
     * @return 项目信息
     */
    public ProjectInfo selectProjectInfoById(Long id);

    /**
     * 查询项目信息列表
     * 
     * @param projectInfo 项目信息
     * @return 项目信息集合
     */
    public List<ProjectInfo> selectProjectInfoList(ProjectInfo projectInfo);

    /**
     * 新增项目信息
     * 
     * @param projectInfo 项目信息
     * @return 结果
     */
    public int insertProjectInfo(ProjectInfo projectInfo);

    /**
     * 修改项目信息
     * 
     * @param projectInfo 项目信息
     * @return 结果
     */
    public int updateProjectInfo(ProjectInfo projectInfo);

    /**
     * 批量删除项目信息
     * 
     * @param ids 需要删除的项目信息主键集合
     * @return 结果
     */
    public int deleteProjectInfoByIds(Long[] ids);

    /**
     * 删除项目信息信息
     * 
     * @param id 项目信息主键
     * @return 结果
     */
    public int deleteProjectInfoById(Long id);

    /**
     * 获取项目下楼栋列表
     * @param projectNo
     * @return
     */
    public List<String> getFloorList(String projectNo);

    /**
     * 创建楼栋
     * @param floorInfo
     * @return
     */
    public int createFloor(FloorInfo floorInfo);

    /**
     * 复制楼栋
     * @param floorInfo
     * @return
     */
    public int copyFloor(FloorInfo floorInfo);


    /**
     * 获取楼层构件——楼层表
     * @return
     */
    public AjaxResult getFloorLayer(FloorInfo floorInfo);

    public List<CompomentInfo> getCompomentList(FloorInfo floorInfo);

    /**
     * 添加构件
     * @return
     */
    public int addWidget(FloorInfo floorInfo);

    /**
     * 删除楼栋
     * @return
     */
    public int delFloor(FloorInfo floorInfo);




    /**
     * 复制层
     */
    public int copyLayer(FloorInfo floorInfo);

    /**
     * 删除层
     * @param floorInfo
     * @return
     */
    public int delLayer(FloorInfo floorInfo);
    /**
     * 模板下载
     * @return
     */
    public void templateDownload(HttpServletResponse response) throws IOException;

    /**
     * 模板导入
     * @return
     */
    public AjaxResult templateExport(MultipartFile file, String projectNo,String buildNo) throws IOException;

    /**
     * 项目下构件导出
     * @param response
     * @param projectInfo
     */
    public void exportMember(HttpServletResponse response, ProjectInfo projectInfo) throws IOException;


    /**
     * 获取可绑定的项目
     * @return
     */
    public List<ContractInfo> getContractInfoList();

    public ContractInfo selectContractInfoById(Long id);
}
